//原始类型与对象类型的区别
// let a = 100;
// let b = a;
// a = 200;
// console.log(a,b);

// let obj = {x: 100};
// let obj2 = obj;
// obj.x = 200;   //这里修改的是对象本身
// console.log(obj, obj2);

// let a = {x: 100};
// let b = a;
// a = {x:200};  //这里修改的是变量，并不是对象本身
// console.log(a, b);


// const对象 不能修改 在对象中添加属性可以
// const a = {x: 100};
// a.x = 200;  //这里修改的是对象本身，因为const修饰的变量是可变的
// // a= {x:200}  这里会报错 不能直接修改对象
// console.log(a);


// function func(a){
//     a.x = 300
//     let c = a(100,200)
//     console.log(a)
// }
//
// func("luojinsheng")
// func({x:200})
//func(function (a, b){ return a + b});


/*函数传参机制：
当传入的是原始类型，形参的任何改变，都不会影响实参
当传入的是对象类型，对形参指向的对象进行改变，都会影响实参*/
// function func(b) {
//     b = 200;  //这个只是一个局部变量 并不会改变传进来的原来的值
//     console.log(b);
//     return 0;
// }
// let a = 100;
// func(a);
// console.log(a);


// function func(b) {
//     b.x = 200;   //自始至终只有一个对象 并且传进去的对象的属性可以被修改 而且会影响传入的对象
//     console.log(a)
// }
// let a = {x: 100};
// func(a);
// console.log(a);

// function func() {
//     let a = {x: 100};
//     return a;
// }
// let b = func();
// console.log(func().x);
// console.log(func()());   //当func()()时 相当于func()返回了一个对象 然后又执行了括号运算符 相当于执行了两个函数


